//package com.hongyi.quartz.config;
//
//import org.slf4j.Logger;
//import org.slf4j.LoggerFactory;
//import org.springframework.context.annotation.Bean;
//import org.springframework.context.annotation.Configuration;
//import org.springframework.scheduling.quartz.SchedulerFactoryBean;
//
//import javax.sql.DataSource;
//import java.util.Properties;
//
///**
// * 定时任务配置
// *
// * @author DingHao
// */
//@Configuration
//public class ScheduleConfig {
//
//    private static final Logger log = LoggerFactory.getLogger(ScheduleConfig.class);
//
//    @Bean
//    public SchedulerFactoryBean schedulerFactoryBean(DataSource dataSource) {
//        log.info("quartz config init start");
//        //设置数据源，让 Quartz 可以通过这个数据源与数据库交互，管理持久化的任务调度信息
//        SchedulerFactoryBean factory = new SchedulerFactoryBean();
//        factory.setDataSource(dataSource);
//
//        // quartz参数
//        Properties prop = new Properties();
//        prop.put("org.quartz.scheduler.instanceName", "LycheeScheduler");//调度器实例的名字
//        prop.put("org.quartz.scheduler.instanceId", "AUTO");//设置调度器实例 ID 为自动生成
//        // 线程池配置
//        prop.put("org.quartz.threadPool.class", "org.quartz.simpl.SimpleThreadPool");//指定线程池的实现类为 SimpleThreadPool
//        prop.put("org.quartz.threadPool.threadCount", "20");//设置线程池中线程的数量为 20 个
//        prop.put("org.quartz.threadPool.threadPriority", "5");//设置线程优先级为 5（默认值
//        // JobStore配置
//        //prop.put("org.quartz.jobStore.class", "org.quartz.impl.jdbcjobstore.JobStoreTX");
//        // TODO springboot版本从2.2更新到2.6改动
//        prop.put("org.quartz.jobStore.class", "org.springframework.scheduling.quartz.LocalDataSourceJobStore");//指定 JobStore 的实现类为 LocalDataSourceJobStore
//        // 集群配置
//        prop.put("org.quartz.jobStore.isClustered", "false");//启用集群模式
//        prop.put("org.quartz.jobStore.clusterCheckinInterval", "600000");//设置集群检查间隔为 15 秒
//        prop.put("org.quartz.jobStore.maxMisfiresToHandleAtATime", "1");//设置每次处理的最大错过触发数为 1
//        prop.put("org.quartz.jobStore.txIsolationLevelSerializable", "true");//设置事务隔离级别为可序列化
//
//        // sqlserver 启用
//        // prop.put("org.quartz.jobStore.selectWithLockSQL", "SELECT * FROM {0}LOCKS UPDLOCK WHERE LOCK_NAME = ?");
//        prop.put("org.quartz.jobStore.misfireThreshold", "600000");//设置错过触发的时间阈值为 12 秒
//        prop.put("org.quartz.jobStore.tablePrefix", "QRTZ_");//设置 Quartz 数据库表的前缀为 QRTZ_
//        factory.setQuartzProperties(prop);//上述配置的 Properties 对象应用到 SchedulerFactoryBean
//
//        factory.setSchedulerName("LycheeScheduler");//设置调度器的名字
//        // 延时启动
//        factory.setStartupDelay(1);//设置调度器启动延迟时间为 1 秒
//        factory.setApplicationContextSchedulerContextKey("applicationContextKey");//设置一个键，用于将 Spring 的 ApplicationContext 放入调度器上下文中
//        // 可选，QuartzScheduler
//        // 启动时更新己存在的Job，这样就不用每次修改targetObject后删除qrtz_job_details表对应记录了
//        factory.setOverwriteExistingJobs(true);
//        // 设置自动启动，默认为true
//        factory.setAutoStartup(true);
//        log.info("quartz config init success");
//        return factory;
//    }
//}
